import { sequelize } from "@/data_base/connect/index.js";
import { randomUUID } from "@/utils/index.js";
import { DataTypes } from "sequelize";
/**
 * 使用 Sequelize 定义一个名为 'pwd' 的模型，该模型对应数据库中的一个表，
 * 用于存储密码相关信息，如密码名称、密码内容、密码分类等。
 *
 * @param {string} 'pwd' - 模型名称，Sequelize 会根据这个名称创建或操作数据库表。
 * @param {Object} { ... } - 模型的属性配置对象，定义了表中的字段及其属性。
 * @returns {Model} - 返回一个 Sequelize 模型实例，可用于后续数据库操作。
 */

const pwd = sequelize.define(
	"pwd",
	{
		// 表的主键字段，类型为 UUID
		// primaryKey 设为 true 表示该字段是主键
		// allowNull 设为 false 表示该字段值不能为空
		// defaultValue 使用 generateUUIDv4 生成默认的 UUIDv4 值
		id: {
			type: DataTypes.UUID,
			primaryKey: true,
			allowNull: false,
			defaultValue: randomUUID,
		},
		// 密码标题字段，类型为字符串，不能为空
		title: {
			type: DataTypes.STRING,
			allowNull: false,
		},
		// 当前管理的密码的网站网址字段，类型为字符串，不能为空
		url: {
			type: DataTypes.STRING,
			allowNull: false,
		},
		// 当前管理的密码的用户名字段，类型为字符串，不能为空
		name: {
			type: DataTypes.STRING,
			allowNull: false,
		},
		// 当前管理的密码的加密密码内容字段，类型为字符串，不能为空
		pwd: {
			type: DataTypes.STRING,
			allowNull: false,
		},
        // 当前管理的密码的备注字段，类型为字符串
        remark: {
            type: DataTypes.STRING,
        }
	},
	{
		/**
		 * 模型配置选项对象，用于设置模型的额外属性和行为。
		 */
		// 启用时间戳功能，当该选项设置为 true 时，Sequelize 会自动在数据库表中添加
		// createdAt 和 updatedAt 两个字段。
		// createdAt 字段会在新记录创建时自动记录当前时间，
		// updatedAt 字段会在记录更新时自动更新为当前时间。
		timestamps: false,
		// 字段名使用下划线风格
		// underscored: true,
		// 开启软删除功能
		// paranoid: true,
		// 为 tag 字段添加索引
		// indexes: [
		// 	{
		// 		fields: ["tag"],
		// 	},
		// ],
		// 表名和模型名保持一致
		// freezeTableName: true,
	}
);

// 将定义好的 'pwd' 模型导出，供其他模块使用
export { pwd };
